package com.grupoconstruobras.sigo.general.data;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Immutable;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * The persistent class for the m_municipio database table.
 */
@Entity
@Immutable
@Table(name = "municipio", schema = "public")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Municipio implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5107116904049859541L;

	@Id
	@NotNull
	@NotEmpty
	@Column(name = "idmunicipio")
	private Integer idMunicipio;

	@Transient
	private String activo;

	@Column(name = "municipio")
	private String nombre;

	// bi-directional many-to-one association to BienUbicacion
	// @OneToMany(mappedBy = "MMunicipio", fetch = FetchType.LAZY)
	// private List<BienUbicacion> bienUbicacions;

	// bi-directional many-to-one association to Departamento
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "iddepartamento")
	private Departamento MDepartamento;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idpais")
	private Pais MPais;

	public Pais getMPais() {
		return MPais;
	}

	public void setMPais(Pais mPais) {
		MPais = mPais;
	}

	public Municipio() {
	}

	public Municipio(Integer idMunicipio) {
		this.idMunicipio = idMunicipio;
	}

	public Municipio(String idMunicipio) {
		this(Integer.parseInt(idMunicipio));
	}

	public Integer getIdMunicipio() {
		return this.idMunicipio;
	}

	public void setIdMunicipio(Integer idMunicipio) {
		this.idMunicipio = idMunicipio;
	}

	@Deprecated
	public String getActivo() {
		// return this.activo;
		return "1";
	}

	@Deprecated
	public void setActivo(String activo) {
		// this.activo = activo;
	}

	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Departamento getMDepartamento() {
		return this.MDepartamento;
	}

	public void setMDepartamento(Departamento MDepartamento) {
		this.MDepartamento = MDepartamento;
	}

	@Override
	public boolean equals(Object other) {
		if (this == other) {
			return true;
		}
		if (other == null || !(other instanceof Municipio))
			return false;

		if (getIdMunicipio() != null)
			return getIdMunicipio()
					.equals(((Municipio) other).getIdMunicipio());
		return super.equals(other);
	}

	@Override
	public int hashCode() {
		if (getIdMunicipio() == null)
			return super.hashCode();
		else
			return getIdMunicipio().hashCode();
	}

}
